package cn.zclong.user.service;

import java.util.List;

import cn.zclong.user.dao.UserDao;
import cn.zclong.user.domain.User;

/*
 * 业务层
 */
public class UserService {
	private UserDao userDao = new UserDao();
	
	/*
	 * 注册功能
	 */
	public void regist(User form) throws UserException {
		//校验用户名
		User user = userDao.findByUsername(form.getUsername());
		if(user != null) throw new UserException("该用户名已被注册");
		
		//校验邮箱
		user = userDao.findByEmail(form.getEmail());
		if(user != null) throw new UserException("该邮箱名已被注册");
		
		//添加用户
		userDao.addUser(form);
	}
	
	/*
	 * 激活功能
	 */
	public void active(String code) throws UserException {
		//校验激活码
		User user = userDao.findByCode(code);
		/*
		 * 2，如果user不存在，说明激活码错误
		 */
		if(user == null) throw new UserException("激活码无效");
		/*
		 * 3，校验用户的状态是否为未激活状态，如果已激活，说明是二次激活，抛出异常
		 */
		if(user.isState()) throw new UserException("您已经激活过了，无须再激活");
		/*
		 * 修改激活码状态
		 */
		userDao.updateState(user.getUid(), true);
	}
	
	/*
	 * 登录功能
	 */
	public User login(User form) throws UserException {
		/*
		 * 1，使用username查询，得到User
		 * 2，如果user为null，抛出异常，用户名不存在
		 * 3，比较form和user的密码，若不同，抛出异常（密码错误）
		 * 4，查看用户激活码的状态，若为false，抛出异常（尚未激活）
		 * 5，返回user
		 */
		User user = userDao.findByUsername(form.getUsername());
		
		if(user == null) throw new UserException("用户名不存在！");
		
		if(!user.getPassword().equals(form.getPassword())) throw new UserException("密码错误！");
		
		if(!user.isState()) throw new UserException("您尚未激活，请激活后登录！");
		
		return user;
	}

	/*
	 * 管理员查询所有的用户信息
	 */
	public List<User> findAll() {
		
		return userDao.findAll();
	}

	/*
	 * 管理员删除用户
	 */
	public void delete(String uid) throws UserException {
		//获取该用户激活状态，若为true，则不删除
		boolean state = userDao.findByUid(uid);
		if(state == true) throw new UserException("该用户已注册，不能删除！"); 
		userDao.delete(uid);
	}

	/*
	 * 管理员添加用户
	 */
	public void add(User user) throws UserException {
		//校验用户名
		User user1 = userDao.findByUsername(user.getUsername());
		if(user1 != null) throw new UserException("该用户名已被注册");
		userDao.addUser(user);
	}

	/**
	 * 管理员修改用户之前的加载工作
	 */
	public User load(String uid) {
		return userDao.load(uid);
	}

	/**
	 * 管理员修改用户
	 * @throws UserException 
	 */
	public void edit(User user) throws UserException {
		//校验用户名
		User user1 = userDao.findByUsername(user.getUsername());
		if(user1 != null) throw new UserException("该用户名已存在");
		userDao.edit(user);
	}

	/*
	 * 管理员登录
	 */
	public User adminLogin(User form) throws UserException {
		/*
		 * 1，使用username查询，得到User
		 * 2，如果user为null，抛出异常，用户名不存在
		 * 3，比较form和user的密码，若不同，抛出异常（密码错误）
		 * 4，查看用户激活码的状态，若为false，抛出异常（尚未激活）
		 * 5，返回user
		 */
		User user = userDao.adminLogin(form.getUsername());
		
		if(user == null) throw new UserException("用户名不存在！");
		
		if(!user.getPassword().equals(form.getPassword())) throw new UserException("密码错误！");
		
		if(!user.isState()) throw new UserException("您尚未激活，请激活后登录！");
		
		return user;
	}

	
}
